设备就像文件

Unix 系统中, 每个设备都被当做一个文件. 每个设备都有一个文件名、一个 i-node 号、 一个文件所有者、一个权限位的集合和最近修改时间.

设备具有文件名

每个加载到 Unix 机器的设备都通过文件名表示.

设备和系统调用

设备不仅具有文件名, 而且支持与所有文件相关的系统调用: open、read、write、 lseek、close 和 stat

终端就像文件

write0.c

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

    int
main( int argc, char **argv )
{
    int fd;
    char buf[BUFSIZ];
    if (argc !=2 ){
        fprintf(stderr, "usage: %s ttyname\n", argv[0]);
        return 1;
    }

    fd = open(argv[1], O_WRONLY);
    if (fd == -1){
        perror(argv[1]);
        return 1;
    }

    while (fgets(buf, BUFSIZ, stdin) != NULL)
        if( write(fd, buf, strlen(buf)) == -1)
            break;
    close(fd);
    return 0;
}

设备文件和 i-node

每个i-node编号指向 i-node 表中的一个结构. i-node 可以是磁盘文件的, 也可以是设 备文件的. i-node 的类型被记录在结构 stat 的成员变量 st_mode 的类型区域中